package com.childenglish.utils;

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

/**
 * Jasypt 加密工具类
 * 用于生成加密后的密码
 */
public class JasyptUtil {

    /**
     * 加密方法
     * @param plainText 明文
     * @param password 加密密钥
     * @return 密文
     */
    public static String encrypt(String plainText, String password) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor.encrypt(plainText);
    }

    /**
     * 解密方法
     * @param encryptedText 密文
     * @param password 加密密钥
     * @return 明文
     */
    public static String decrypt(String encryptedText, String password) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(password);
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setPoolSize("1");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
        config.setIvGeneratorClassName("org.jasypt.iv.NoIvGenerator");
        config.setStringOutputType("base64");
        encryptor.setConfig(config);
        return encryptor.decrypt(encryptedText);
    }

    /**
     * 测试加密
     */
    public static void main(String[] args) {
        // 设置加密密钥（与配置文件中一致）
        String password = "your-secret-key-123";

        // 要加密的原文
        String plainText = "123456";

        // 加密
        String encryptedText = encrypt(plainText, password);
        System.out.println("原文: " + plainText);
        System.out.println("密文: " + encryptedText);
        System.out.println("加密格式: ENC(" + encryptedText + ")");

        // 解密测试
        String decryptedText = decrypt(encryptedText, password);
        System.out.println("解密: " + decryptedText);
        System.out.println("解密成功: " + plainText.equals(decryptedText));
    }
}